#pragma once



#include "NervusDebug.h"


#include "NervusStdIncludes.h"
#include "NervusTypes.h"


//Predeclarations
namespace Nervus {
	namespace Core {
		class EngineCore;

		class Window;
		class Input;
		class Chrono;



		const string DEFAULT_WND_TITLE = "NERVUS Engine";
		const u32 DEFAULT_WND_WIDTH = 800;
		const u32 DEFAULT_WND_HEIGHT = 600;
	}

	namespace Render {
		class RenderSystem;		
		class Camera;
		struct MeshVertex;

		class Material;
		class Texture;
		class Mesh;
		class Sprite;

		class D3D11RenderSystem;
		class D3D11Mesh;
		class D3D11Sprite;

		class D3D9RenderSystem;
		class D3D9Mesh;
		class D3D9Sprite;
	}
}

namespace Nervus {
	namespace Render {

		const u32 VERTEX_FORMAT_3D = D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1;
		const u32 VERTEX_FORMAT_2D = D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1;


		enum NERVUS_RENDERSYSTEM { NERVUS_RS_D3D9, NERVUS_RS_D3D11, NERVUS_RS_OGL };
		enum NERVUS_MESHTYPE{ NVMT_POLYGONLIST, NVMT_POLYGONSTRIP, NVMT_POLYGONFAN, NVMT_LINELIST, NVMT_LINESTRIP, NVMT_POINTLIST };
	}
}